perm filename PUPFTP.ODI[S,NET] blob sn#817885 filedate 1986-05-25 generic text, type T, neo UTF8
  1) PUPFTP.FAI[S,NET] and 2) PUPFTP.OFA[S,NET]	5-25-86 10:14	pages 2,2

**** File 1) PUPFTP.FAI[S,NET]/2P/16L
1)	DEFINE VERINF<.TTL(CCRMA,0.4U,24-May-86)>	;Did you make a history comment?
1)							;Type αFHistoryα:
**** File 2) PUPFTP.OFA[S,NET]/2P/16L
2)	DEFINE VERINF<.TTL(CCRMA,0.4U,22-May-86)>	;Did you make a history comment?
2)							;Type αFHistoryα:
***************


**** File 1) PUPFTP.FAI[S,NET]/2P/36L
1)	IFNDEF FTXINF,<↓FTXINF←←1>
1)	;Use same definitions as MAXC uses, so other EtherNet wizards may find
**** File 2) PUPFTP.OFA[S,NET]/2P/37L
2)	;Use same definitions as MAXC uses, so other EtherNet wizards may find
***************


**** File 1) PUPFTP.FAI[S,NET]/3P/131L
1)	24-May-86 TVR	Double-quoting the whole thing was wrong.  Need to quote everything
1)			up to last host.  We look only for "@" (and hope there isn't anyone
1)			around who still uses "%").  Changed password handling to avoid
1)			using INF privilege.  Fixed error code in PLSTNM.  Misc. cleanup
1)			to get rid of a few PRINTX's.
1)	History:
**** File 2) PUPFTP.OFA[S,NET]/3P/131L
2)	22-May-86 ME	Disabled used of INFPRV to check passwords.
2)			[Seems like the version/date macro ought to be right here!]
2)			Only put up PUP007, for testing out mail address quoting stuff.
2)	History:
***************


**** File 1) PUPFTP.FAI[S,NET]/4P/47L
1)	↓RCILAC←←23	;Illegal Connect-Name
1)	↓RCILDV←←31	;Illegal device
**** File 2) PUPFTP.OFA[S,NET]/4P/47L
2)	↓RCILDV←←31	;Illegal device
***************


**** File 1) PUPFTP.FAI[S,NET]/8P/53L
1)	;;; *** This kludge assumes host name is exactly five characters long.  Sigh. ***
1)	PCONFIG←←227
**** File 2) PUPFTP.OFA[S,NET]/8P/53L
2)	printx Kludge to get host name from CONFIG
2)	PCONFIG←←227
***************


**** File 1) PUPFTP.FAI[S,NET]/8P/75L
1)	USERBG:	CALL WRASCZ,FTPVER,ERMSOP
1)		CALL WRASCZ↑,<[[ASCIZ/
1)	/]]>,ERMSOP
1)	HNMLP:	SKIPN NOPRMT		;Skip prompt due to invocation line?
**** File 2) PUPFTP.OFA[S,NET]/8P/75L
2)	printx Maybe replace these OUTSTRs
2)	USERBG:	OUTSTR FTPVER
2)		OUTSTR[ASCIZ/
2)	/]
2)	HNMLP:	SKIPN NOPRMT		;Skip prompt due to invocation line?
***************


**** File 1) PUPFTP.FAI[S,NET]/17P/96L
1)		MOVEI RET,MFDCHN
1)	printx We crash here if we reference a UDP that isn't mounted.
1)	;;;    That is, if no pack is mounted, we can get "UDP offline or write locked",
1)	;;;    and there's no obvious way of finding out if there is a pack there other
1)	;;;    than doing an absolute read (which requires INFPRV)
1)	NOTUDP:	LOOKUP MFDCHN,MFDFIL
1)		  JRST[	CALL SNDMRK,<[MKNO]>
**** File 2) PUPFTP.OFA[S,NET]/17P/96L
2)	printx We crash here if we reference a UDP that isn't mounted.
2)		LOOKUP MFDCHN,MFDFIL
2)		  JRST[	CALL SNDMRK,<[MKNO]>
***************


**** File 1) PUPFTP.FAI[S,NET]/18P/82L
1)	;;; This one is even worse, as at this point, not even WAITS knows the pack
1)	;;; is write-locked!
1)		ENTER OUTCHN,OUTFIL
**** File 2) PUPFTP.OFA[S,NET]/18P/82L
2)		ENTER OUTCHN,OUTFIL
***************


**** File 1) PUPFTP.FAI[S,NET]/20P/152L
1)		movei ret,[asciz?" ?]	;must end the quoted /FROM string!
**** File 2) PUPFTP.OFA[S,NET]/20P/152L
2)	;printx Since everyone supplies a full user name (with host), do with need (SuNet)?
2)	;	movei ret,[asciz? (SuNet) " ?]
2)	;	call wrascz↑,ret,outop
2)		movei ret,[asciz?" ?]	;must end the quoted /FROM string!
***************


**** File 1) PUPFTP.FAI[S,NET]/20P/155L
1)	TOLOOP:	HLRZ RET,(TAC)		;Get name
1)		TLO RET,(<POINT 7,0>)
1)		PUSHP RET
1)		PUSHP TAC
1)		SETZ TAC,
1)	;	\ /
**** File 2) PUPFTP.OFA[S,NET]/20P/158L
2)	TOLOOP:	MOVEI RET,42		;Double-quote
2)		XCT OUTOP
2)		HLRZ RET,(TAC)		;Get name
2)		CALL WRASCZ↑,RET,OUTOP
2)		MOVEI RET,42		;Double-quote
2)		XCT OUTOP
2)		HRRZ TAC,(TAC)		;Get next name
2)		JUMPN TAC,[MOVEI RET,","	;Separate by commas
2)			   XCT OUTOP
2)			   JRST TOLOOP]
2)		CALL WRASCZ,<[[BYTE (7) 15,12,14,"R","e"↔
2)			       ASCIZ/ceived: from /]]>,OUTOP
2)					;Rest is message
***************


**** File 1) PUPFTP.FAI[S,NET]/20P/163L
1)	;up to that.  We assume the rest is a valid host name.		TVR/May86
1)	TOLP2:	ILDB RET,-1(P)		;Get character from destination
1)		CAIN RET,"@"		;Does it look like a host name?  (If you change this
1)					;    you'll have to stack the host separator below)
1)		  MOVE TAC,-1(P)	;  Yes, remember the last thing like this we've seen
1)		JUMPN RET,TOLP2		;Repeat until end of string
1)		MOVEM TAC,-1(P)		;Remember the division
1)		POPP TAC		;Get back list poitner
1)		HLRZ RET,(TAC)		;So we can get back to beginning of list
1)		SKIPN (P)		;Is there a host name?
1)		  JRST[	POP P,(P)	;  No, we're done then.
1)			JRST NOHOST ]
1)		SETZ RET,		;Terminate string at last "@" (If more than one
1)		DPB RET,(P)		;  host seperator, you'll have to save it.)
1)		MOVEI RET,42		;Double-quote
1)		XCT OUTOP
1)		HLRZ RET,(TAC)		;Get back name again
1)		CALL WRASCZ↑,RET,OUTOP	;Output from beginning of string up to last "@"
1)		MOVEI RET,42		;Double-quote
1)		XCT OUTOP
1)		MOVEI RET,"@"		;Put back host separator
1)		DPB RET,(P)
1)		POPP RET		;Get rest of destination string.
1)	;	\ /
1)	NOHOST:	CALL WRASCZ↑,RET,OUTOP	;Output unquoted destination or @<host name>
1)		HRRZ TAC,(TAC)		;Get next name
1)		JUMPN TAC,[MOVEI RET,","	;Separate by commas
1)			   XCT OUTOP
1)			   JRST TOLOOP]
1)		CALL WRASCZ,<[[BYTE (7) 15,12,14,"R","e"↔
1)			       ASCIZ/ceived: from /]]>,OUTOP
1)					;Rest is message
1)	;insert line saying when Received and from where, e.g.:
1)	;Received: from CMU-CS-C by SU-AI with NCP/FTP; 20 Jan 83  11:42:41 PST
1)		CALL WRASCZ↑,<[HNAME]>,OUTOP	;ptr to host name
**** File 2) PUPFTP.OFA[S,NET]/20P/173L
2)		CALL WRASCZ↑,<[HNAME]>,OUTOP	;ptr to host name
***************


**** File 1) PUPFTP.FAI[S,NET]/28P/219L
1)	;printx Need to flush data stream if we get bad binary input.
1)			TRZ RET2,377		;Yes, losing T[W]ENEX PUPFTP
**** File 2) PUPFTP.OFA[S,NET]/28P/219L
2)	printx Need to flush data stream if we get bad binary input.
2)			TRZ RET2,377		;Yes, losing T[W]ENEX PUPFTP
***************


**** File 1) PUPFTP.FAI[S,NET]/34P/120L
1)	IFE FTXINF,<
1)		CALL HASHER,RET			;Mangle it to discourange password hacking
1)	>;IFE FTXINF
1)	NOPSW:	PUSHP RET
**** File 2) PUPFTP.OFA[S,NET]/34P/120L
2)		CALL HASHER,RET			;Mangle it to discourange password hacking
2)	NOPSW:	PUSHP RET
***************


**** File 1) PUPFTP.FAI[S,NET]/41P/87L
1)			SKIPE RET2,CONNAM
1)			  JRST[	MOVEI RET,RCILAC
1)				JRST FINIS2 ]
**** File 2) PUPFTP.OFA[S,NET]/41P/87L
2)	printx Find the right error code with CONNECT-NAME is bad.
2)			SKIPE RET2,CONNAM
2)			  JRST[	MOVEI RET,RCILDR
2)				JRST FINIS2 ]
***************


**** File 1) PUPFTP.FAI[S,NET]/46P/24L
1)		May set UPPN,OLDPSW,PRIVS,PSWD
1)		Uses PROCHN for its own purposes.
**** File 2) PUPFTP.OFA[S,NET]/46P/24L
2)		May set UPPN,OLDPWD,PRIVS,PSWD
2)		Uses PROCHN for its own purposes.
***************


**** File 1) PUPFTP.FAI[S,NET]/46P/48L
1)	IFN FTXINF,<
1)		CALL HASHER,RET			;If we haven't mangled it yet, do it now.
1)	>;IFN FTXINF
1)		CAMN RET,OLDPSW			;Same as the last one?
**** File 2) PUPFTP.OFA[S,NET]/46P/48L
2)		CALL PLGET,PLIST,<[P.UPSW]>	;Get password
2)		JUMPE RET,[SETZM PASSOK		;  No longer valid
2)			   JRST SKPPCK ]
2)		MOVE RET,(RET)			;Get mangled password from f.s. block
2)		CAMN RET,OLDPSW			;Same as the last one?
***************


**** File 1) PUPFTP.FAI[S,NET]/46P/71L
1)	IFE FTXINF,<
1)		MOVSI RET,INFPRV		;We need to get the password
1)		PRVIOR RET,
1)	>;IFE FTXINF
1)		MTAPE PROCHN,PRVMTA		;Read special stuff (at least for priv bits)
1)		  JRST SKPPCK			;  Can't.  Forget about giving owner access.
1)	IFE FTXINF,<
1)		MOVE RET,PASWD
**** File 2) PUPFTP.OFA[S,NET]/46P/72L
2)	;	MOVSI RET,INFPRV		;We need to get the password
2)	;	PRVIOR RET,
2)		MTAPE PROCHN,PRVMTA		;Read special stuff
2)		  JRST SKPPCK			;  Can't.  Forget about giving owner access.
2)		MOVE RET,PASWD
***************


**** File 1) PUPFTP.FAI[S,NET]/46P/90L
1)	>;IFE FTXINF
1)	IFN FTXINF,<
1)		SETZM PASWD			;Just in case...
1)		CALL PLGET,PLIST,<[P.UPSW]>	;Get password again
1)		JUMPE RET,[SETZM PASSOK		;  No longer valid
1)			   JRST SKPPCK ]
1)		MOVE RET,(RET)			;Get (maybe) mangled password from f.s. block
1)		MOVEM RET,PASMTA+3
1)		MTAPE PROCHN,PASMTA		;At M. Frost's request.
1)		  JRST[	SETZM PASMTA+3
1)			JRST SKPPCK ]
1)		SETZM PASMTA+3
1)		SETOM PASSOK
1)		CALL HASHER,RET			;At least make it more challenging...
1)		MOVEM RET,OLDPSW		;Put it back for a while
1)	>;IFN FTXINF
1)		MOVE RET,PRIVWD			;Copy privileges to permanent place.
**** File 2) PUPFTP.OFA[S,NET]/46P/88L
2)		MOVE RET,PRIVWD			;Copy privileges to permanent place.
***************


**** File 1) PUPFTP.FAI[S,NET]/46P/111L
1)	IFE FTXINF,<
1)		MOVSI RET,INFPRV		;No longer need to be special
1)		PRVACM RET,
1)	>;IFE FTXINF
1)		POPJ P,
**** File 2) PUPFTP.OFA[S,NET]/46P/93L
2)	;	MOVSI RET,INFPRV		;No longer need to be special
2)	;	PRVACM RET,
2)		POPJ P,
***************


**** File 1) PUPFTP.FAI[S,NET]/47P/43L
1)				RETURN ]		;Fail, don't stop job, on errors
1)		ISDSK:	MOVEI RET,200
1)			RETURN ]
**** File 2) PUPFTP.OFA[S,NET]/47P/43L
2)				RETURN ]
2)		ISDSK:	MOVEI RET,200			;Fail, don't stop job, on errors
2)			RETURN ]
***************


**** File 1) PUPFTP.FAI[S,NET]/51P/22L
1)		MOVE RET,VALUE
**** File 2) PUPFTP.OFA[S,NET]/51P/22L
2)	printx Using kludge hashing function.
2)		MOVE RET,VALUE
***************


**** File 1) PUPFTP.FAI[S,NET]/64P/20L
1)			MOVE RET,PUPIHD+2	;Get byte count
**** File 2) PUPFTP.OFA[S,NET]/64P/20L
2)	repeat 0,<
2)			MOVE RET,PUPIHD		;Get address of buffer
2)			ADD RET,1(RET)		;Address last word in buffer
2)	printx Flush this someday, since we get an honest byte count.
2)			LDB RET,[POINT 4,1(RET),35]	;Get padding information
2)			SKIPLE RET,[0↔-1↔2↔-2↔4↔5↔6↔-3↔10↔11↔12↔13↔14↔15↔16↔17](RET)
2)			  PUSHJ P,DRYROT	;  "Can't happen"
2)			ADDB RET,PUPIHD+2	;Update byte count
2)	>;repeat 0
2)			MOVE RET,PUPIHD+2	;Get byte count
***************